package mk.jug.academy.service;

import mk.jug.academy.model.Event;
import mk.jug.academy.model.Page;

/**
 * Defines the contract for the services
 * regarding an {@link Event} in the system.
 *
 * @author Ice.Penov
 */
public interface EventService {
		
	/**
	 * Creates a new {@link Event} in the system.
	 */
	void createEvent(Event event);
	
	/**
	 * Removes (hard-delete) an {@link Event}.
	 */
	void removeEvent(Event event);
	
	/**
	 * Modifies an existing {@link Event}.
	 */
	void saveChanges(Event event);
	
	/**
	 * Gets the {@link Event} given the ID.
	 */
	Event load(Long id);
	
	/**
	 * Gets the latest {@link Event}s, in a paged manner.
	 */
	Page<Event> list(int pageNumber, int itemsPerPage);	
		
}